home *** CD-ROM | disk | FTP | other *** search
- /* Front-end tree definitions for GNU compiler.
- Copyright (C) 1989 Free Software Foundation, Inc.
-
- This file is part of GNU CC.
-
- GNU CC is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, or (at your option)
- any later version.
-
- GNU CC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU CC; see the file COPYING. If not, write to
- the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
- #ifndef REAL_H_INCLUDED
- #define REAL_H_INCLUDED
-
- /* If we are not cross-compiling, use a `double' to represent the
- floating-point value. Otherwise, use some other type
- (probably a struct containing an array of longs). */
- #ifndef REAL_VALUE_TYPE
- #define REAL_VALUE_TYPE double
- #else
- #define REAL_IS_NOT_DOUBLE
- #endif
-
- /* Compare two floating-point values for equality. */
- #ifndef REAL_VALUES_EQUAL
- #define REAL_VALUES_EQUAL(x,y) ((x) == (y))
- #endif
-
- /* Compare two floating-point values for less than. */
- #ifndef REAL_VALUES_LESS
- #define REAL_VALUES_LESS(x,y) ((x) < (y))
- #endif
-
- /* Scale X by Y powers of 2. */
- #ifndef REAL_VALUE_LDEXP
- #define REAL_VALUE_LDEXP(x,y) ldexp (x, y)
- extern double ldexp ();
- #endif
-
- /* Convert the string X to a floating-point value. */
- #ifndef REAL_VALUE_ATOF
- #define REAL_VALUE_ATOF(x) atof (x)
- extern double atof ();
- #endif
-
- /* Negate the floating-point value X. */
- #ifndef REAL_VALUE_NEGATE
- #define REAL_VALUE_NEGATE(x) (- (x))
- #endif
-
- /* Truncate the floating-point value X to single-precision. */
- #ifndef REAL_VALUE_TRUNCATE
- #define REAL_VALUE_TRUNCATE(x) ((float) (x))
- #endif
-
- /* Union type used for extracting real values from CONST_DOUBLEs
- or putting them in. */
-
- union real_extract
- {
- REAL_VALUE_TYPE d;
- int i[sizeof (REAL_VALUE_TYPE) / sizeof (int)];
- };
-
- /* For a CONST_DOUBLE:
- The usual two ints that hold the value.
- For a DImode, that is all there are;
- and CONST_DOUBLE_LOW is the low-order word and ..._HIGH the high-order.
- For a float, the number of ints varies,
- and CONST_DOUBLE_LOW is the one that should come first *in memory*.
- So use &CONST_DOUBLE_LOW(r) as the address of an array of ints. */
- #define CONST_DOUBLE_LOW(r) XINT (r, 2)
- #define CONST_DOUBLE_HIGH(r) XINT (r, 3)
-
- /* Link for chain of all CONST_DOUBLEs in use in current function. */
- #define CONST_DOUBLE_CHAIN(r) XEXP (r, 1)
- /* The MEM which represents this CONST_DOUBLE's value in memory,
- or const0_rtx if no MEM has been made for it yet,
- or cc0_rtx if it is not on the chain. */
- #define CONST_DOUBLE_MEM(r) XEXP (r, 0)
-
- /* Function to return a real value (not a tree node)
- from a given integer constant. */
- REAL_VALUE_TYPE real_value_from_int_cst ();
-
- #endif /* Not REAL_H_INCLUDED */
-